package com.gushenge.core.requests.weal

import androidx.lifecycle.viewModelScope
import com.gushenge.core.beans.*
import com.gushenge.core.dao.GlobalConsts
import com.gushenge.core.dao.MMKVConsts
import com.gushenge.core.httpSign
import com.gushenge.core.time
import com.gushenge.core.toast
import kotlinx.coroutines.launch
import rxhttp.awaitResult
import rxhttp.toClass
import rxhttp.wrapper.param.RxHttp

object CommunityRequest {
    //$type=0 社区列表，$type=1 社区内的全部社区   $type=2 社区内的我的关注
    suspend fun getData(
        p: Int,
        type: Int,
        key: String = "",
        listener: CommunityListBean.() -> Unit
    ) {
        RxHttp.get(GlobalConsts.SHEQULIST)
            .add("uid", MMKVConsts.uid)
            .add("t", time)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("p", p)
            .add("type", type)
            .add("keyword", key)
            .add("member_id", MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<CommunityListBean>()
            .awaitResult {
                if (it.code == 1) {
                    listener(it)
                } else {
                    it.message.toast()
                }
            }
    }

    suspend fun guanzhu(id: String, listener: () -> Unit) {
        RxHttp.get(GlobalConsts.SHEQULISTZAN)
            .add("uid", MMKVConsts.uid)
            .add("id", id)
            .add("t", time)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("member_id", MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<Code<String>>()
            .awaitResult {
                if (it.code == 1) {
                    listener()
                } else {
                    it.message.toast()
                }
            }
    }

    suspend fun getCommunityTop(id: String, listener: CommunityBean.Data. () -> Unit) {
        RxHttp.get(GlobalConsts.SHEQU)
            .add("uid", MMKVConsts.uid)
            .add("id", id)
            .add("t", time)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("member_id", MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<CommunityBean>()
            .awaitResult {
                if (it.code == 1) {
                    listener(it.data)
                } else {
                    it.message.toast()
                }
            }
    }

    suspend fun getCommunityNews(
        p: Int,
        id: String,
        type: Int,
        listener: FragCommunityBean . () -> Unit
    ) {
        RxHttp.get(GlobalConsts.SHEQUNEWS)
            .add("uid", MMKVConsts.uid)
            .add("id", id)
            .add("t", time)
            .add("type", type)
            .add("p", p)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("member_id", MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<FragCommunityBean>()
            .awaitResult {
                if (it.code == 1) {
                    listener(it)
                } else {
                    it.message.toast()
                }
            }
    }

    suspend fun newsDel(id: String, listener: () -> Unit) {
        RxHttp.get(GlobalConsts.NEWSDEL)
            .add("uid", MMKVConsts.uid)
            .add("id", id)
            .add("t", time)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("member_id", MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<Code<String>>()
            .awaitResult {
                if (it.code == 1) {
                    listener()
                } else {
                    it.message.toast()
                }
            }
    }

    suspend fun getNewsDetail(id: String?, listener: FragCommunityBean.Data?.() -> Unit) {
        RxHttp.get(GlobalConsts.NEWSINFO)
            .add("uid", MMKVConsts.uid)
            .add("id", id)
            .add("t", time)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("member_id", MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<Code<FragCommunityBean.Data>>()
            .awaitResult {
                if (it.code == 1) {
                    listener(it.data)
                } else {
                    it.message.toast()
                }
            }
    }

    suspend fun getPingLunList(p: Int, id: String?, listener: CommunityPingLunBean.() -> Unit) {
        RxHttp.get(GlobalConsts.NEWSPINGLUNLIST)
            .add("uid", MMKVConsts.uid)
            .add("id", id)
            .add("t", time)
            .add("p", p)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("member_id",MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<CommunityPingLunBean>()
            .awaitResult{
                if(it.code==1){
                    listener(it)
                }else{
                    it.message.toast()
                }
            }
    }
    /**
     * @param type Int 	分类 2攻略 4问题
     * @param pid String 社区ID
     * @param title String
     * @param content String
     * @param image ArrayList<String>
     */
    suspend   fun subPingLun (type: Int,pid:String ,title:String ,content:String , image:String,listener: Code<String>.() -> Unit){
        RxHttp.postForm(GlobalConsts.NewAdd)
            .add("uid", MMKVConsts.uid)
            .add("class_id", type)
            .add("t", time)
            .add("pid", pid)
            .add("title", title)
            .add("content", content)
            .add("image", image)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("member_id",MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<Code<String>>()
            .awaitResult{
                listener(it )

            }
    }
    /**
     *
     * @param type Int 0 对文章点赞  1 对评论点赞
     * @param pid String 文章或评论的id
     * @param puid String 上级的uid 文章或者评论的发布者
     */
    suspend fun zan (type:Int, pid:String,puid:String,listener: Int.() -> Unit){
        RxHttp.get(GlobalConsts.PINGLUNZAN)
            .add("uid", MMKVConsts.uid)
            .add("type", type)
            .add("t", time)
            .add("pid", pid)
            .add("puid", puid)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("member_id",MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<Code<String>>()
            .awaitResult{
                it.message.toast()
                listener(it.code )
            }
    }
    /**
     * @param type:String  1 对评论   0 对文章
     * @param content String
     * @param pid String  文章id 或者评论id (主评论) 子评论也传主评论id
     * @param puid String  文章id 或者评论uid 如果是回复子评论咋传子评论uid
     * @param listener [@kotlin.ExtensionFunctionType] Function1<Int, Unit>
     */
    suspend  fun huifu (type:String,content:String, pid:String,puid:String,listener: Int.() -> Unit){
       RxHttp.postForm(GlobalConsts.PINGLUNADD)
           .add("uid", MMKVConsts.uid)
           .add("content", content)
           .add("t", time)
           .add("pid", pid)
           .add("puid", puid)
           .add("type", type)
           .add("sign", httpSign(MMKVConsts.uid))
           .add("member_id",MMKVConsts.sub)
           .add("language", MMKVConsts.language)
           .toClass<Code<String>>()
           .awaitResult{
               it.message.toast()
               listener(it.code )
           }
    }
    suspend fun  wodehuifu(p:Int,listener:CommunityPingLunBean.() -> Unit){
        RxHttp.postForm(GlobalConsts.HUIFU)
            .add("uid", MMKVConsts.uid)
            .add("t", time)
            .add("p", p)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("member_id",MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<CommunityPingLunBean>()
            .awaitResult{
                listener( it)
            }
    }
    suspend fun meNews(p:Int,listener: FragCommunityBean.() -> Unit){
        RxHttp.postForm(GlobalConsts.MENEWS)
            .add("uid", MMKVConsts.uid)
            .add("t", time)
            .add("p", p)
            .add("sign", httpSign(MMKVConsts.uid))
            .add("member_id",MMKVConsts.sub)
            .add("language", MMKVConsts.language)
            .toClass<FragCommunityBean>()
            .awaitResult{
                listener( it)
            }
    }
}